import time
from selenium.webdriver import ChromeOptions
from selenium.webdriver import Chrome
# 【2】驱动位置服务
from selenium.webdriver.chrome.service import Service
# 【3】选择器
from selenium.webdriver.common.by import By
from fake_useragent import UserAgent

# 【二】创建浏览器对象
# 【1】指定驱动位置
executable_path = "./chromedriver.exe"
service = Service(executable_path=executable_path)
options = ChromeOptions()
# 无痕模式
options.add_argument('--incognito')  # 隐身模式（无痕模式）
# 禁用浏览器自动化提示条
options.add_argument('--disable-blink-features=AutomationControlled')
# 排除启用自动化开关
options.add_experimental_option("excludeSwitches", ["enable-automation"])
# 关闭自动化扩展信息
options.add_experimental_option('useAutomationExtension', False)
# 设置Chrome为正常用户模式
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')

# 设置Agent
options.add_argument(
    f'--user-agent={UserAgent().random}')
# 【2】创建浏览器对象
browser = Chrome(service=service, options=options)
# 设置隐式等待时间为10秒
browser.implicitly_wait(10)
# 关键：执行CDP命令来隐藏webdriver属性，避免被检测
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
        Object.defineProperty(navigator, 'webdriver', {
            get: () => undefined
        })
    """
})



browser.get("https://pic.netbian.com/")
print(f"请求到搜索页面成功!")
# wait()

# 【三】找到动漫按钮点击动漫
# 【1】找到动漫按钮
dong_man_btn = browser.find_element(By.XPATH, '//*[@id="main"]/div[2]/a[1]')
dong_man_btn.click()
print(f"点击动漫按钮成功")
# wait()
img_data = {}


# 【四】解析动漫下的 ul 列表
def parse_per_page():
    li_list = browser.find_elements(By.XPATH, '//*[@id="main"]/div[3]/ul/li')
    next_page_li = li_list.pop()
    print(len(li_list))
    print(f"获取动漫壁纸列表成功")
    # wait()

    # 【五】解析每一张图片
    for li in li_list:
        try:
            # //*[@id="main"]/div[3]/ul/li[1]/a
            detail_url = li.find_element(By.XPATH, './a').get_attribute("href")
            browser.get(detail_url)
            img_url = browser.find_element(By.XPATH, '//*[@id="img"]/img').get_attribute("src")
            img_tile = browser.find_element(By.XPATH, '//*[@id="img"]/img').get_attribute("title")
            img_data[img_tile] = img_url
            browser.back()
            time.sleep(0.5)
        except Exception as e:
            print(e)
            continue
    print(f"当前页数据已经抓取完成 {len(img_data)}")
    next_page_url = next_page_li.find_element(By.XPATH, './a').get_attribute("href")
    print(f"下一页地址 : {next_page_url}")
    browser.get(next_page_url)
    parse_per_page()
    time.sleep(5)


parse_per_page()































